package com.gebogebo.android.pub;



import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;

public class pubView extends View {
	
	private Bitmap  mBitmap;
    private Canvas  mCanvas;
    private Path    mPath;
    private Paint   mBitmapPaint;
    private Paint	mPaint;
    
    private Context ourContext;

	public pubView(Context context, AttributeSet attrs){
		super(context, attrs);
		initpubview(context);
	}

	public pubView(Context context) {
		super(context);
		initpubview(context);
		// TODO Auto-generated constructor stub
		// setup your basic class variables here
		        
	}
	
	public void setBitmaptoAlpha(){
		mCanvas.drawColor(0x00000000);
	}
	
	private final void initpubview(Context context)
	{
		WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);		
		DisplayMetrics metrics = new DisplayMetrics();
		wm.getDefaultDisplay().getMetrics(metrics);

		int width = metrics.heightPixels;
		int height = metrics.widthPixels;
		
		
		mBitmap = Bitmap.createBitmap(height, width, Bitmap.Config.ARGB_8888);
		mCanvas = new Canvas(mBitmap);		
		mPath = new Path();
		mBitmapPaint = new Paint(Paint.DITHER_FLAG);
		
		mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(12);        
        
        //mCanvas.drawColor(Color.WHITE);
        
        //mCanvas.drawColor(Color.GRAY);
        
        //mCanvas.drawColor(0x00000000);
        
		ourContext = context;
	}

	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);
        
        canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
        
        canvas.drawPath(mPath, mPaint);
	}

	@Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
		// TODO Auto-generated method stub
		super.onSizeChanged(w, h, oldw, oldh);
	}
	
	
	private float mX, mY;
    private static final float TOUCH_TOLERANCE = 4;
    
    private void touch_start(float x, float y) {
        //mPath.reset();
        mPath.moveTo(x, y);
        mX = x;
        mY = y;
    }
    private void touch_move(float x, float y) {
        float dx = Math.abs(x - mX);
        float dy = Math.abs(y - mY);
        if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
            mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
            mX = x;
            mY = y;
        }
    }
    private void touch_up() {
        mPath.lineTo(mX, mY);
        // commit the path to our offscreen
        mCanvas.drawPath(mPath, mPaint);
        // kill this so we don't double draw
        mPath.reset();
    }

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		
		float x = event.getX();
		float y = event.getY();
		
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			touch_start(x,y);
			invalidate();
			break;
		case MotionEvent.ACTION_MOVE:
			touch_move(x,y);
			invalidate();
			break;
		case MotionEvent.ACTION_UP:
			touch_up();
			invalidate();
			break;
		}
		return true;
	}
	
	public void setBrushColor(int Color) {
		mPaint.setColor(Color);
	}
	
	public float getBrushSize(){
		return mPaint.getStrokeWidth();
	}
	
	
	public void setBrushSize(int Size) {
		mPaint.setStrokeWidth(Size);
	}
	
	public Canvas getCanvas(){
		return mCanvas;
	}
	
	public Bitmap getBitmap(){
		return mBitmap;
	}
	
	public void setPaintBrushColor(String ColorName){
		mPaint.setColor(Color.parseColor(ColorName));
	}
}
